package com.xmut.mall.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xmut.mall.product.utils.PageUtils;
import com.xmut.mall.product.entity.CategoryEntity;
import com.xmut.mall.product.utils.RespBean;
import com.xmut.mall.product.vo.AddCateVo;
import com.xmut.mall.product.vo.Catelog2Vo;
import com.xmut.mall.product.vo.EditCateVo;

import java.util.List;
import java.util.Map;

/**
 * 商品三级分类
 *
 * @author 1912120131suntingxing
 * @email 1192081604@qq.com
 * @date 2022-07-14 00:45:33
 */
public interface CategoryService extends IService<CategoryEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 查出所有的分类以及子分类，以树形结构组装起来返回给前端
     */
    List<CategoryEntity> listWithTree();

    void removeMenuByIds(List<Long> asList);

    Long[] findCatelogPath(Long catelogId);

    void updateCascade(CategoryEntity category);

    /**
     * 获取商品的二级分类和三级分类
     * @return
     */
    Map<String, List<Catelog2Vo>> getIndexCateLevel2andLevel3();

    /**
     * 获取商品的一级分类
     * @return
     */
    List<CategoryEntity> getCateLogLevel1();



    /**
     * 获取全部分类
     * @return
     */
    List<CategoryEntity> getAllCate();

    /**
     * 根据cateId获取它的父分类将其组合起来
     * @param catalogId
     * @return
     */
    List<CategoryEntity> getCateParentAndMerge(Long catalogId);

    /**
     * 添加分类
     * @param vo
     * @return
     */
    RespBean addCate(AddCateVo vo);

    /**
     * 获取三级分类树
     * @return
     */
    List<CategoryEntity> getCateTree();

    /**
     * 编辑分类信息
     * @param vo
     * @return
     */
    RespBean editCate(EditCateVo vo);

    /**
     * 禁用该分类
     * @param cateId
     * @return
     */
    RespBean disableCate(Long cateId);

    /**
     * 启用分类
     * @param cateId
     * @return
     */
    RespBean enableCate(Long cateId);

    /**
     * 根据Id获取子分类(只有一级)
     * @param cateId
     * @return
     */
    RespBean getCateTreeById(Long cateId);

    /**
     * 获取分类选择组件的数据结果
     * @return
     */
    RespBean getCateTreeComponent();

    /**
     * 获取适配前端的Cascader组件的分类树
     * @return
     */
    RespBean getCateByCascader();

}

